using System;
using System.Reflection; // Necesario pra extender una clase

namespace Serpis
{
	public static class MemberInfoExtensions
	{
		public static TAttribute GetAttribute<TAttribute>(this MemberInfo memberInfo) where TAttribute : Attribute
		{
			return (TAttribute)Attribute.GetCustomAttribute(memberInfo, typeof(TAttribute), true);
		}
		
		public static bool IsDefined<TAttribute>(this MemberInfo memberInfo)
		{
			return Attribute.IsDefined(memberInfo, typeof(TAttribute), true);
		}
		
		//	Metodo GetLabel, que extiende la clase MemberInfo para que nos decore la clase
		//	y nos devuelva la etiqueta de cada clase
		public static string GetLabel(this MemberInfo memberInfo)
		{
			// Si no esta definido el atributo label, devuelve el nombre de la clase
			if(!memberInfo.IsDefined<LabelAttribute>())
				return memberInfo.Name;
			LabelAttribute labelAttribute = memberInfo.GetAttribute<LabelAttribute>();
			return labelAttribute.Label;

		}
	}
}
